package com.demo.webapp.ui;

import javax.servlet.ServletContext;

import com.demo.webapp.ui.displayer.Displayer;
import com.demo.webapp.ui.displayer.DisplayerMapping;

/**
 * 组件持久资源接口
 * 该接口提供资源的持久存储
 * 
 * @author ryuu.kk
 *
 */
public interface RepositoryResource {
    //~ Methods ================================================================

	/**
	 * 设置资源名称
	 * @param name 资源名
	 */
    public void setName(String name);

    /**
     * 取得资源名称
     * @return 返回资源名称
     */
    public String getName();

    /**
     * 取得Servlet上下文
     * @return 返回ServletContext
     */
    public ServletContext getServletContext();

    /**
     * 返回持久资源注册的显示器对象
     * @param name 显示器对象名称
     * @return 显示器对象
     */
    Displayer<?> getDisplayerMapping(String name);
    
    /**
     * 将显示器对象加入到持久层资源
     * @param displayer 显示器对象
     */
    void addDisplayer(Displayer<?> displayer);
    
    /**
     * 取得显示器对象所需的容器组件
     * @param name 组件名称
     * @return 组件
     */
    <T> T getComponent(String name);

    /**
     * 加入组件放入持久化资源容器
     * @param T Component接口的实现类
     */
    <T extends Component> void addComponent(T t);
    
    /**
     * 返回持久层的
     * @return 返回展示器Map
     */
	DisplayerMapping getMapping();
}